package com.itany.corejava.code07_面向对象.bms;

/**
 * @author 石小俊
 * 2024年07月17日 13:34
 */
public class Bank {

    // 所有的开户的账户
    static Account[] accounts = new Account[100];
    // 当前已开户账户的总数
    static int count = 0;

    /**
     * 用户开户,开户操作由银行完成,但是开户所需要的信息由用户填写
     * @param account 开户所需要的账户信息,该信息由方法的调用者提供
     * @return 开户是否成功
     */
    public static boolean register(Account account) {
        // 判断当前账户数量是否达到了最大值
        // 只有尚未达到最大值时才能开户,否则无法开户
        if (count < accounts.length) {
            accounts[count++] = account;
            return true;
        }
        return false;
    }

    /**
     * 账户登录
     * @param id       卡号
     * @param password 密码
     * @return 如果卡号密码正确, 则返回登录后的对应账户信息；如果卡号密码不正确,则直接返回null
     */
    public static Account login(int id, String password) {
        // 遍历数组,查询数组中是否存在某个账户的卡号与密码与传递的卡号密码一致
        for (int i = 0; i < count; i++) {
            Account account = accounts[i];
            // 如果存在一致的
            if (account.getId() == id && password.equals(account.getPassword())) {
                // 此时表示卡号与密码正确,返回对应的账户
                return account;
            }
        }
        // 如果遍历完之后没有找到对应的账户
        // 说明卡号或者密码错误,直接返回null
        return null;
    }

    /**
     * 根据卡号查找对应账户信息
     * @param id 卡号
     * @return 对应的账户
     */
    public static Account findById(int id) {
        for (int i = 0; i < count; i++) {
            Account account = accounts[i];
            if (account.getId() == id) {
                return account;
            }
        }
        return null;
    }
}
